
package Util;

/**
 *
 * @author henriquediomede
 */
public class Geometry 
{
    
    public void crossProduct(Vertex v1, Vertex v2, Vertex result)
    {
        float x = (v1.y() * v2.z()) - (v1.z() * v2.y());
        float y = (v1.z() * v2.x()) - (v1.x() * v2.z());
        float z = (v1.x() * v2.y()) - (v1.y() * v2.x());
        
        result.x(x);
        result.y(y);
        result.z(z);
    }
    
    public void calculateNormal(Vertex v1, Vertex v2, Vertex v3, Vertex vNormal)
    {
        Vertex aux1 = new Vertex();
        Vertex aux2 = new Vertex();
        
        aux1.x(v1.x() - v2.x());
        aux1.y(v1.y() - v2.y());
        aux1.z(v1.z() - v2.z());
        
        aux2.x(v3.x() - v2.x());
        aux2.y(v3.y() - v2.y());
        aux2.z(v3.z() - v2.z());
        
        crossProduct(aux1, aux2, vNormal);
        
        normalize(vNormal);
        
        vNormal.printv();
    }
    
    
    public void normalize(Vertex v)
    {
        float magnitude = 0;
        magnitude = (v.x()*v.x()) + (v.y()*v.y()) + (v.z() * v.z());
        magnitude = (float) Math.sqrt(magnitude);
        float inverseMagnitude = 1/magnitude;
        v.x(v.x()*inverseMagnitude);
        v.y(v.y()*inverseMagnitude);
        v.z(v.z()*inverseMagnitude);
    }
    
}
